package day1227;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class File4_Yang_finish {
    //添加主函数：  让当前文件能运行
    public static void main(String[] args){
        //数据类型 变量名;
        //int        i=88787;   //int  double  //基本类型变量

        //数据类型(文件名JFrame)  标识符w=new  数据类型(文件名JFrame);
        JFrame     w=new JFrame();  //引用类型变量//w--窗口
        JPanel    p=new JPanel();   //p-----面板(纸)
        ImageIcon bg=new ImageIcon("images/背景.jpg");
        JLabel  label=new JLabel(bg);//标签包含图片


        p.setLayout(null);//取消面板p默认的排列方式
        label.setSize(480,800);
        label.setLocation(0,0);
        p.add(label);

//         ImageIcon  img=new ImageIcon("images/干草.png");
//         JButton  b=new JButton(img);
//         b.setSize(59,66);
//         b.setLocation(40,40);
//         p.add(b,0);//0表示处于按钮b处于JPanel  p的顶层

        ArrayList imgName=new ArrayList();//快速复制快捷键：ctrl  d
        //         1.用ArrayList存储所有的图片名字
        imgName.add("刷子");    imgName.add("剪刀");
        imgName.add("叉子");  imgName.add("奶瓶");
        imgName.add("干草");    imgName.add("手套");
        imgName.add("树桩");  imgName.add("棉花");
        imgName.add("毛线");    imgName.add("水桶");
        imgName.add("火");    imgName.add("玉米");
        imgName.add("白菜");    imgName.add("草");
        imgName.add("萝卜");    imgName.add("铃铛");
//         2. ImageIcon img=new ImageIcon("文件夹名字/图片名字")
//         3.创建很多按钮也存入到ArrayList中
        ArrayList  btns=new ArrayList();

        //int index=1;
        for(int j=1;j<=6;j=j+1) {
            for (int i = 0; i < imgName.size(); i = i + 1) {//思考2： 自己想办法给这个循环外边添加一个外层循环，控制此循环执行6遍 可以创建16*6个按钮
                ImageIcon img = new ImageIcon("images/" + imgName.get(i) + ".png");
                ImageIcon disableImg = new ImageIcon("images/" + imgName.get(i) + "2.png");
                JButton b = new JButton(img);
                b.setSize(59, 66);
              //  b.setName(index++ +"");
                b.setDisabledIcon(disableImg);
                b.setEnabled(false);
                //b.setLocation(40 + i % 6 * 59, 40 + i / 6 * 66);//下课后考虑将40改成一个表达式实现棋盘的方式显示按钮
                //p.add(b,0);
                btns.add(b);
            }
        }
        putBtns(0,6,7, btns,p, 30,100);
        putBtns(42,5,6, btns,p, 60,133);//自己思考第二层(通过修改数据实现)

        /*for (int i = 0; i < 6*7; i = i + 1) {
            if(i+1 == btns.size()){
                break;
            }
            JButton b=(JButton) btns.get(i);
            b.setLocation(40 + i % 4 * 59, 40 + i / 4 * 66);
            p.add(b,0);
        }*/

        checkCards(btns);

        //槽子
        ArrayList though = new ArrayList();
        //5. 为每个牌增加动作事件
        addAction(btns, though);

        w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        w.add(p);
        //创建窗口了
        w.setSize(480, 800); //让窗口宽高位  480像素，  800像素
        w.setVisible(true);//让窗口显示
    }

    private static void addAction(ArrayList btns, ArrayList though) {
        for(int i=0; i< btns.size(); i++){
            JButton button= (JButton) btns.get(i);
            ActionListener lis=new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    JButton clickBtn= (JButton) e.getSource();
                    if(though.size()==7){
                        JOptionPane.showMessageDialog(clickBtn,"槽子满了");
                        return;
                    }
                    btns.remove(clickBtn);
                    ActionListener l=clickBtn.getActionListeners()[0];
                    clickBtn.removeActionListener(l);
                    clickBtn.setLocation(20+though.size()*63,642);
                    though.add(clickBtn);///后期要换掉(换成检查是否有三张连续的牌并消除)
                    checkCards(btns);
                }

            };
            button.addActionListener(lis);
        }
    }

    static  void putBtns(int start, int row,  int col,
                         ArrayList  btns, JPanel    p, int x, int y){
        //取出btns中的42个按钮放到界面上
        //下午讲解函数的使用， 继续完成这个游戏的逻辑代码
        /*int i=start;
        for(;i<row*col+start;i=i+1){
            if(i>=96){
                System.out.println("没有第96个按钮");
                return;
            }
            JButton b=(JButton) btns.get(i);//取一个

            b.setLocation(x + (i-start)%(row+1)*59,  y+(i-start)/(col+1)*66);
            //设置位置
            p.add(b,0);//将取出的按钮 JButton  b放到JPanel p上
        }*/

        for(int i=0; i<row * col ; i++){
            //  96     ==  96 到达cards
            if (i+start == btns.size()){
                //到达cards末尾就结束
                return;
            }
            int x1 = x + i % col * 59;
            int y1 = y + i / col * 66;
            JButton card = (JButton) btns.get(i + start);
            card.setLocation(x1, y1);
            card.setEnabled(false);
            p.add(card, 0);
        }
    }



    private static void checkCards(ArrayList btns) {
        for(int i=0;i<btns.size();i++){
            JButton card1= (JButton) btns.get(i);
            card1.setEnabled(true);
            for(int j=i+1;j<btns.size();j++){
                JButton card2= (JButton) btns.get(j);
                int x1=card1.getX()-59;
                int x2=card1.getX()+59;
                int y1=card1.getY()-59;
                int y2=card1.getY()+59;
                if(card2.getX()>x1 && card2.getX() < x2 &&
                        card2.getY()>y1 && card2.getY()<y2){
                    card1.setEnabled(false);
                }
            }
        }
    }
}
